package org.tinygroup.menuframe.manager;

import org.tinygroup.menuframe.config.Menu;
import org.tinygroup.menuframe.dto.MenuInfo;
import org.tinygroup.menuframe.dto.MenuNode;
import org.tinygroup.menuframe.util.MenuUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by wangwy11342 on 2016/10/18.
 */
public interface MenuTreeManager {
    /**
     * 加载菜单列表
     * @param menuList
     */
    void load(List<Menu> menuList);

    /**
     *根据当前的url获取整棵树的MenuInfo(不管权限)
     * @param currentUrl
     * @return
     */
    MenuInfo getAllMenuInfo(String currentUrl);

    /**
     *根据当前的url和用户的权限((不一定是连续的,可能只是个叶子节点)获取整棵树的MenuInfo
     * @param authMenuList
     * @param currentUrl
     * @return
     */
    MenuInfo getAuthMenuInfoByAuthMenus(List<Menu> authMenuList, String currentUrl);

    /**
     *根据当前的url和用户的权限id((不一定是连续的,可能只是个叶子节点)获取整棵树的MenuInfo
     * @param authMenuIdList
     * @param currentUrl
     * @return
     */
    MenuInfo getAuthMenuInfo(List<Integer> authMenuIdList, String currentUrl);

    /**
     * 根据当前的权限列表获取所有的菜单node
     * @param authMenuIdList 从用户的菜单id列表(不一定是连续的,可能只是个叶子节点)
     * @return 返回的结构包含整个树的结构
     */
    List<MenuNode> getAuthMenuNodeList(List<Integer> authMenuIdList);

    /**
     *根据当前的权限列表以及传入的所有菜单获取所有的菜单node
     * 一般用于不通过load加载直接获取权限菜单的方式
     * @param allMenuList 所有菜单
     * @param authMenuIdList 用户有权限的菜单id
     * @return
     */
    List<MenuNode> getAuthMenuNodeList(List<Menu> allMenuList,List<Integer> authMenuIdList);

    /**
     * 根据用户的权限树和当前url获取MenuInfo
     * @param currentUrl
     * @param authMenuNodeList
     * @return
     */
    MenuInfo getAuthMenuInfo(String currentUrl,List<MenuNode> authMenuNodeList);


}
